<?php

class Doctrine_Model_CreditoDao extends Doctrine_Model_BaseDao {

    public function obtenerTodos() {
        return $this->getEntityManager()
                        ->createQuery('select cr from Doctrine_Model_Entities_Credito cr')
                        ->getResult();
    }

    public function obtenerPorId($id) {
        return $this->getEntityManager()->find('Doctrine_Model_Entities_Credito', $id);
    }

    public function guardar(Doctrine_Model_Entities_Credito $unCredito) {
        try {
            $this->getEntityManager()->persist($unCredito);
            $this->getEntityManager()->flush();
            return true;
        } catch (Exception $e) {
            echo ($e->xdebug_message);
            $logger = Zend_Registry::get('logger');
            $logger->log("Error guardar credito:" . $e->getMessage(), Zend_Log::ERR);
            return false;
        }
    }

    public function obtenerPorNroCredito($numero) {
        return $this->getEntityManager()
                        ->createQuery('select cr from Doctrine_Model_Entities_Credito cr WHERE cr.numero = ' . $numero)
                        ->getResult();
    }

    public function esActivo($credito_id) {
        return $this->getEntityManager()
                        ->createQuery('select cr.id from Doctrine_Model_Entities_Credito cr WHERE cr.id = ' . $credito_id)
                        ->getResult();
    }

    public function obtenerPorCliente($id) {
        return $this->getEntityManager()
                        ->createQuery('select cr from Doctrine_Model_Entities_Credito cr WHERE cr.cliente = ' . $id)
                        ->getResult();
    }

    public function obtenerPorClienteOrdenadoPorEstado($id) {
        return $this->getEntityManager()
                        ->createQuery('select cr from Doctrine_Model_Entities_Credito cr JOIN cr.estado e WHERE cr.cliente = ' . $id . ' ORDER BY e.id  ASC')
                        ->getResult();
    }

    public function obtenerTodosPorPersonaOrdenadoPorEstado($id) {
        return $this->getEntityManager()
                        ->createQuery('select cr from Doctrine_Model_Entities_Credito cr JOIN cr.estado e WHERE cr.cliente = ' . $id . ' or cr.garante = ' . $id . ' ORDER BY cr.fecha DESC, e.id  ASC')
                        ->getResult();
    }

    public function obtenerPorGaranteOrdenadoPorEstado($id) {
        return $this->getEntityManager()
                        ->createQuery('select cr from Doctrine_Model_Entities_Credito cr JOIN cr.estado e WHERE cr.garante = ' . $id . ' ORDER BY e.id  ASC')
                        ->getResult();
    }

    public function obtenerTodosActivos() {
        return $this->getEntityManager()
                        ->createQuery('select cr from Doctrine_Model_Entities_Credito cr JOIN cr.estado e WHERE e.id = 1 ORDER BY cr.fecha ASC')
                        ->getResult();
    }

    public function obtenerTodosActivosPorSucursal($sucursalId) {
        return $this->getEntityManager()
                        ->createQuery('select cr from Doctrine_Model_Entities_Credito cr JOIN cr.estado e JOIN cr.usuario u JOIN u.sucursal s WHERE e.id = 1   and s.id=' . $sucursalId . '  ORDER BY cr.fecha ASC')
                        ->getResult();
    }

    public function obtenerActivosEntreFechas($desde, $hasta) {
        return $this->getEntityManager()
                        ->createQuery("select cr from Doctrine_Model_Entities_Credito cr JOIN cr.estado e WHERE e.id = 1 and cr.fecha >= '" . $desde . " 00:00:00' and cr.fecha <= '" . $hasta . " 23:59:59' ORDER BY cr.fecha ASC ")
                        ->getResult();
    }

    public function obtenerTodosActivosEntreFechasPorSucursal($desde, $hasta, $sucursalId) {
        return $this->getEntityManager()
                        ->createQuery("SELECT cr FROM Doctrine_Model_Entities_Credito cr "
                                . " JOIN cr.estado e "
                                . " JOIN cr.usuario u "
                                . " JOIN u.sucursal s "
                                . " JOIN cr.cliente cl "
                                . " WHERE e.id = 1 "
                                    . " AND cr.fecha >= '{$desde} 00:00:00' AND cr.fecha <= '{$hasta} 23:59:59' "
                                    . " AND s.id = {$sucursalId} "
                                . " ORDER BY cl.id ASC, cr.fecha ASC ")
                        ->getResult();
    }
    
    public function obtenerActivosEntreFechasPorSucursal($desde, $hasta, $sucursalId) {
        return $this->getEntityManager()
                        ->createQuery("select cr from Doctrine_Model_Entities_Credito cr JOIN cr.estado e  JOIN cr.usuario u JOIN u.sucursal s WHERE e.id = 1 and cr.fecha >= '" . $desde . " 00:00:00' and cr.fecha <= '" . $hasta . " 23:59:59' and s.id=" . $sucursalId . " ORDER BY cr.fecha ASC ")
                        ->getResult();
    }

    public function obtenerTodosEntreFechas($desde, $hasta) {
        return $this->getEntityManager()
                        ->createQuery("select cr from Doctrine_Model_Entities_Credito cr  WHERE  cr.fecha >= '" . $desde . " 00:00:00' and cr.fecha <= '" . $hasta . " 23:59:59' ORDER BY cr.fecha ASC ")
                        ->getResult();
    }

    public function obtenerTodosEntreFechasPorSucursal($desde, $hasta, $sucursalId) {
        return $this->getEntityManager()
                        ->createQuery("select  cr from Doctrine_Model_Entities_Credito cr JOIN cr.usuario u JOIN u.sucursal s  WHERE  cr.fecha >= '" . $desde . " 00:00:00' and cr.fecha <= '" . $hasta . " 23:59:59'     and s.id=" . $sucursalId . "    ORDER BY cr.fecha ASC ")
                        ->getResult();
    }
        public function obtenerTodosEntreFechasPorSucursalFacturados($desde, $hasta, $sucursalId) {
        return $this->getEntityManager()
                        ->createQuery("select  cr from Doctrine_Model_Entities_Credito cr JOIN cr.usuario u JOIN u.sucursal s  WHERE  cr.fecha >= '" . $desde . " 00:00:00' and cr.fecha <= '" . $hasta . " 23:59:59'   and cr.facturado=1 and s.id=" . $sucursalId . "    ORDER BY cr.fecha ASC ")
                        ->getResult();
    }

//    public function obtenerTodosEntreFechasPorSucursalParaReimprimir($desde, $hasta, $sucursalId, $ya_reipresos) {
//
//        return $this->getEntityManager()
//                        ->createQuery("select cr from Doctrine_Model_Entities_Credito cr JOIN cr.usuario u JOIN u.sucursal s  WHERE  cr.fecha >= '" . $desde . " 00:00:00' and cr.fecha <= '" . $hasta . " 23:59:59' and s.id=" . $sucursalId . "  ORDER BY cr.fecha ASC ")
//                        ->getResult();
//    }
    
    public function obtenerCuotasAVencerEntreFechas($desde, $hasta) {
        return $this->getEntityManager()
                        ->createQuery("select c from Doctrine_Model_Entities_Cuota c JOIN c.credito cr WHERE c.vencimientoOriginal >= '" . $desde . " 00:00:00' and c.vencimientoOriginal <= '" . $hasta . " 23:59:59' ")
                        ->getResult();
    }
    
    public function obtenerCuotasAVencerEntreFechasPorSucursal($desde, $hasta, $sucursalId) {
        return $this->getEntityManager()
                        ->createQuery("select c from Doctrine_Model_Entities_Cuota c JOIN c.credito cr JOIN cr.usuario u JOIN u.sucursal s  WHERE  c.vencimientoOriginal >= '" . $desde . " 00:00:00' and c.vencimientoOriginal <= '" . $hasta . " 23:59:59' and s.id=" . $sucursalId . "  ")
                        ->getResult();
    }

    public function obtenerCanceladosEntreFechas($desde, $hasta) {
        return $this->getEntityManager()
                        ->createQuery("select cr from Doctrine_Model_Entities_Credito cr JOIN cr.estado e WHERE (e.id = 2 or e.id = 3)and cr.fecha >= '" . $desde . " 00:00:00' and cr.fecha <= '" . $hasta . " 23:59:59' ORDER BY cr.fecha ASC ")
                        ->getResult();
    }

    public function obtenerCanceladosEntreFechasPorSucursal($desde, $hasta, $sucursalId) {
        return $this->getEntityManager()
                        ->createQuery("select cr from Doctrine_Model_Entities_Credito cr JOIN cr.estado e JOIN cr.usuario u JOIN u.sucursal s  WHERE (e.id = 2 or e.id = 3)and cr.cancelado >= '" . $desde . " 00:00:00' and cr.cancelado <= '" . $hasta . " 23:59:59' and s.id=" . $sucursalId . " ORDER BY cr.cancelado ASC ")
                        ->getResult();
    }

    public function eliminar(Doctrine_Model_Entities_Credito $credito) {
        try {
            $this->getEntityManager()->remove($credito);
            $this->getEntityManager()->flush();
            return true;
        } catch (Exception $e) {
            $logger = Zend_Registry::get('logger');
            $logger->log("Error PromesasDao - eliminar: " . $e->getMessage(), Zend_Log::ERR);
            return false;
        }
    }

    public function obtenerPromesas($credito_id) {
        return $this->getEntityManager()
                        ->createQuery("select p from Doctrine_Model_Entities_Promesas  p   WHERE p.credito_id=" . $credito_id)
                        ->getResult();
    }

}
